package com.rgc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;





import com.rgc.domain.Juego;
import com.rgc.domain.JuegoTipo;
import com.rgc.domain.Region;


public class JuegoDaoImpl extends JdbcDaoSupport implements JuegoDao {

	public List<Juego> listJuego() {
		return findJuego(new String[]{},new String[]{});
	}

	public List<Juego> findJuego(String[] campo, String[] valor) {
		try {
			String sql = " SELECT a.*,b.nombre as juegoTipo FROM juego a,juego_tipo b  ";
			String conector=" where ";
			for (int i=0;i<campo.length;i++)  {
				 sql+=conector+""+campo[i]+"='"+valor[i]+"'";
				 conector=" and ";
						 
		    }
			sql+=conector+"  a.estado=1 and a.idjuego_tipo=b.idjuego_tipo "+" order by idjuego";

			List<Juego> juegoFound =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Juego>(Juego.class));
         
			

        	return juegoFound;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<Juego>();
		
	}

	public Juego getJuego(String idjuego) {
		
		List<Juego> getjuego=findJuego(new String[]{"a.idjuego"},new String[]{idjuego});
		if(getjuego.size()>0){
			return getjuego.get(0);
		}
		
		return null;
	}

	public boolean delJuego(String idjuego) {
		try{	
			String sql="UPDATE juego set estado=0 where idjuego='"+idjuego+"' ";			
			getJdbcTemplate().update(sql);
			return true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return false;
	}

	public boolean addJuego(final Juego juego) {
		
		try {
			
			final String sql = "INSERT INTO juego(nombre,idjuego_tipo,detalle) values(?,?,?)";
			getJdbcTemplate().update(
					new PreparedStatementCreator()
			        {
			            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
			            {
			                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			                preparedStatement.setString(1,juego.getNombre());
			                preparedStatement.setString(2, juego.getIdjuego_tipo());
			                preparedStatement.setString(3, juego.getDetalle());
			                return preparedStatement;
			            }
			        }	
					);			
			   
                
                return true;
         
        } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
        }
		return false;
	}

	
	
	public List<JuegoTipo> listTipoJuego() {
		try {
			String sql = " SELECT * from  juego_tipo   ";
			List<JuegoTipo> juegoFound =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<JuegoTipo>(JuegoTipo.class));

        	return juegoFound;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<JuegoTipo>();

	}

	public Map<String, String> getJuegos() {
		/*
		try{
			String sql = " select * from juego  ";
			List<Juego> regiones=getJdbcTemplate().query(sql, new BeanPropertyRowMapper<Juego>(Juego.class));
			Map<String,String> listado = new LinkedHashMap<String,String>();
			listado.put("0", "--Juego--");
			if(regiones!=null){		
				for(Region region : regiones)
					listado.put(region.getIdregion(), region.getNombre());	
			}
			return listado;
			}catch(Exception e){
				e.printStackTrace();
			}
			*/
			return null;
	}
	
		

}
